#pragma once

#include "IOperation.h"
#include "MsgBoxOperation.h"
#include "ExecOperation.h"

namespace HotKeyOperation
  {
  //------------------------------------------------------------------------

  template<class Operation1,
  class Archive>
    void RegisterOperation(Archive & ar)
    {
    ar.register_type<Operation1>();
    }

  //------------------------------------------------------------------------

  template<class Operation1,
  class Operation2,
  class Archive>
    void RegisterOperation(Archive & ar)
    {
    ar.register_type<Operation1>();
    ar.register_type<Operation2>();
    }

  //------------------------------------------------------------------------

  template<class Operation1,
  class Operation2,
  class Operation3,
  class Archive>
    void RegisterOperation(Archive & ar)
    {
    ar.register_type<Operation1>();
    RegisterOperation<Operation2, Operation3>(ar);
    }

  //------------------------------------------------------------------------

  template <class Archive>
  void RegisterAll(Archive & ar)
    {
    RegisterOperation<IOperation, MsgBoxOperation, ExecOperation>(ar);
    }
  //------------------------------------------------------------------------
  }